#pragma once
#include<iostream>
#include"OperatorClasses.h"
using namespace std;

/*
* 输出运算符重载 <<
* 二元运算符, 第 一 个参数为运算符 左侧运算对象, 第 二 个参数为运算符 右侧运算对象
* 1. 第一个形参 ostream 的引用, 改变 ostream 的状态
* 2. 第二个形参为对象常量引用
*/
ostream& operator<<(ostream& o, const OperatorTestClass& c) {
	o << "PropertyInt: " << c.GetPropertyInt() << ", PropertyStr: " <<  c.GetPropertyStr() << endl;
	return o;
}

/*
* 输入运算符重载 >>
* 1. 第一个形参 istream 引用
* 2. 第二个形参为对象引用, 用于将数据读入到对象中
*/
istream& operator>>(istream& i, OperatorTestClass*& c) {
	int pI;
	string pS;
	i >> pI >> pS;

	if (i) {
		c = new OperatorTestClass();
		c->SetPropertyInt(pI);
		c->SetPropertyStr(pS);
	}
	else {
		c = new OperatorTestClass();
	}

	return i;
}

/*
* 算术运算符 +
*/
OperatorTestClass operator+(const OperatorTestClass& c1, const OperatorTestClass& c2) {
	OperatorTestClass c3(c1.GetPropertyInt() + c2.GetPropertyInt(), c1.GetPropertyStr() + c2.GetPropertyStr());
	return c3;
}

/*
* 关系运算符 ==
*/
bool operator==()